package com.amoyt.project.config.web;

import lombok.extern.slf4j.Slf4j;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;


/**
 * 配置MVC 配置类，静态资源映射，
 */
@Configuration
@Slf4j
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;


    /**
     * 全局OpenAPI基础配置（所有分组共享的信息）
     */
    @Bean
    public OpenAPI globalOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("贫困帮扶在线平台接口文档")
                        .version("1.0")
                        .description("平台所有接口文档，按业务模块分组展示")
                        .contact(new Contact().name("开发团队").email("dev@example.com"))
                );
                /*.components(new Components()
                        .addSecuritySchemes("bearerAuth",  // 支持JWT认证
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")
                        )
                );*/
    }

    /**
     * 1. 访客模块接口分组（包含所有访客相关的Controller）
     * 扫描指定包下的Controller：com.amoyt.project.controller.visitor
     */
    @Bean
    public GroupedOpenApi userModuleApi() {
        return GroupedOpenApi.builder()
                .group("访客模块")  // 分组名称（文档中显示）
                .packagesToScan("com.amoyt.project.controller.visitor")  // 扫描用户模块的Controller包
                .pathsToMatch("/visitor/**")  // 只包含/user/**路径的接口
                .build();
    }

    /**
     * 2. 管理模块接口分组
     * 扫描指定包下的Controller：com.amoyt.project.controller.admin
     */
    @Bean
    public GroupedOpenApi adminModuleApi() {
        return GroupedOpenApi.builder()
                .group("管理模块")  // 分组名称
                .packagesToScan("com.amoyt.project.controller.admin")  // 管理模块Controller包
                .pathsToMatch("/admin/**")  // 只包含/admin/**路径的接口
                .build();
    }

    @Bean
    public GroupedOpenApi webModuleApi() {
        return GroupedOpenApi.builder()
                .group("公共模块")  // 分组名称
                .packagesToScan("com.amoyt.project.controller.web")  // 管理模块Controller包
                .pathsToMatch("/web/**")  // 只包含/admin/**路径的接口
                .build();
    }


    /**
     * 静态资源映射（确保文档页面正常访问）
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("配置knife4j静态资源映射...");
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
        registry.addResourceHandler("/v3/api-docs/**").addResourceLocations("classpath:/META-INF/resources/v3/api-docs/");
        registry.addResourceHandler("/swagger-resources/**").addResourceLocations("classpath:/META-INF/resources/swagger-resources/");
    }
}